package com.csu.hemiao.service.impl;

import com.csu.hemiao.common.CommonResponse;
import com.csu.hemiao.domain.Cart;
import com.csu.hemiao.domain.CartItem;
import com.csu.hemiao.domain.Product;
import com.csu.hemiao.persistence.ProductMapper;
import com.csu.hemiao.service.CartService;
import com.csu.hemiao.service.RedisService;
import org.json.JSONException;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service("cartService")
public class CartServiceImpl implements CartService {
    @Autowired
    RedisService redisService;

    @Autowired
    ProductMapper productMapper;

    //将商品加入购物车
    @Override
    public CommonResponse<JSONObject> addToCart(int productId) throws JSONException {
        //获取缓存中的购物车
        Cart cart = (Cart) redisService.get("cart");

        //将商品添加到购物车
        if(cart.getLine().containsKey(productId)){
            //如果购物车里已有商品，则获取cartItem的数量，然后加一
            CartItem cartItem = (CartItem)cart.getLine().get(productId);
            cartItem.setAmount(cartItem.getAmount() + 1);
            cart.getLine().put(productId,cartItem);
        }
        else{
            //如果购物车里没有此商品，则从数据库中搜索信息，加入到购物车中
            Product product = productMapper.getProductById(productId);
            CartItem cartItem = new CartItem(product, 1);
            cart.getLine().put(productId,cartItem);
        }

        //将购物车添加到缓存
        redisService.set("cart",cart);

        //将商品数目传给前端
        JSONObject info = new JSONObject();
        info.put("numOfProduct",cart.getLine().size());

        return CommonResponse.createForSuccess(info);
    }

    //查看购物车
    @Override
    public CommonResponse<JSONObject> checkCart() throws JSONException {
        //获取缓存中的购物车
        Cart cart = (Cart) redisService.get("cart");

        //将商品信息传给前端
        JSONObject info = new JSONObject();
        info.put("numOfProduct",cart.getLine().size());
        info.put("cart",cart);

        return CommonResponse.createForSuccess(info);
    }
}
